with Entrees_Sorties; use Entrees_Sorties;
with Poste_Fixe; use Poste_Fixe;
with interface_c; use Interface_c;
with Interfaces.C.Strings; use Interfaces.C.Strings;

procedure main is
   tabPostes : TAB_POSTES(0..1);
   std1 : Integer;
   num1, num2 : Integer;
   ville : chars_ptr;
   compta : chars_ptr;

   function getPosteByNumber(number : Integer) return Ptr_Poste is
      i : Integer := 0;
   begin
      while (i < tabPostes'LENGTH) loop
         if (tabPostes(i).monNumero = number) then
            return tabPostes(i);
         end if;
         i := i + 1 ;
      end loop;
      put_line("ADA >> Poste inconnu");
      return null;
   end getPosteByNumber;

begin
   tabPostes(0) := new Poste;
   tabPostes(1) := new Poste;
   put_line("ADA >> Creation d'un standard");
   std1 := creerStandard;
   put("ADA >> Nouveau standard - id = "); put_line(std1);

   put_line("ADA >> Abonnement d'un client");

   begin
      ville := New_String("Toulouse");
      compta := New_String("CB");
      num1 := abonnerClient(std1,ville,false,false,false,false,0,1,compta);
      put("ADA >> Client abonne avec le numero ");
      put_line(num1);

      compta := New_String("Cheque");
      num2 := abonnerClient(std1,ville,false,false,false,false,0,1,compta);
      put("ADA >> Modification de la ville du poste ");
      put_line(num2);

      ville := New_String("Paris");
      modifierAbonnement(std1,num2,ville,false,false,false,false,0,1,compta);
      put("ADA >> Client abonne avec le numero ");
      put_line(num2);

   exception
      when others => put_line("!!! Pragma Exception - abonnerClient !!!");
   end;
   put_line("ADA >> Allumer poste A");
   allumer(tabPostes(0),num1,std1);
   put_line("ADA >> Eteindre poste A");
   eteindre(tabPostes(0));

   put_line("ADA >> Allumer poste A");
   allumer(tabPostes(0),num1,std1);
   put_line("ADA >> Allumer poste B");
   allumer(tabPostes(1),num2,std1);
   tabPostes(0).mesServices.appeler(num2);
   put_line("ADA >> Eteindre poste A");
   eteindre(tabPostes(0));
   put_line("ADA >> Eteindre poste B");
   eteindre(tabPostes(1));

   --destruction des taches
   abort tabPostes(0).mesServices;
   abort tabPostes(1).mesServices;
exception
   when others => put_line("!!! EXCEPTION MAIN !!!");
end main;
